<?php  
// 对empty方法，和 isset 方法的学习比较
//  empty 检查一个变量是否为空 
// bool empty  ( mixed  $var  )
// 判断一个变量是否被认为是空的。当一个变量并不存在，或者它的值等同于 FALSE ，那么它会被认为不存在。如果变量不存在的话， empty() 并不会产生警告。 
/**
返回值

当var存在，并且是一个非空非零的值时返回 FALSE  否则返回 TRUE . 

以下的东西被认为是空的： 
1. "" (空字符串)
2. 0 (作为整数的0)
3. 0.0 (作为浮点数的0)
4. "0" (作为字符串的0)
5. NULL  
6. FALSE  
7. array() (一个空数组)
8. $var; (一个声明了，但是没有值的变量)

 */
$name;
echo empty("")."<br/>";
echo empty(0.0)."<br/>";
echo empty(0)."<br/>";
echo empty("0")."<br/>";
echo empty(NULL)."<br/>";
echo empty(FALSE)."<br/>";
echo empty(array())."<br/>";
echo empty($name)."<br/>";
// 结果打印出来了 全部是 1，其实这一步涉及到了变量值的隐式转换，实际上是返回TRUE,但是在浏览器打印出来确是1

// 一个简单的 empty()  与 isset()  的比较。 

$var  =  0 ;

 // Evaluates to true because $var is empty
 if (empty( $var )) {
    echo  '$var is either 0, empty, or not set at all'."<br/>" ;
}

 // Evaluates as true because $var is set
 if (isset( $var )) {
    echo  '$var is set even though it is empty'."<br/>" ;
}

// 在字符串偏移量上使用 empty() 
$expected_array_got_string  =  'somestring' ;
 var_dump (empty( $expected_array_got_string [ 'some_key' ]));
 echo "<br/>";
 var_dump (empty( $expected_array_got_string [ 0 ]));
 echo "<br/>";

 var_dump (empty( $expected_array_got_string [ '0' ]));
 echo "<br/>";

 var_dump (empty( $expected_array_got_string [ 0.5 ]));
 echo "<br/>";

 var_dump (empty( $expected_array_got_string [ '0.5' ]));
 echo "<br/>";
/**
bool(true) 
bool(false) 
bool(false) 
bool(false) 
bool(true) 
bool(true) 
 */
 var_dump (empty( $expected_array_got_string [ '0 Mostel' ]));
 echo "<br/>";
 echo $expected_array_got_string [ 0 ]."<br>";
 echo $expected_array_got_string [ 0.5 ]."<br>";


// isset — 检测变量是否设置 
$var  =  '' ;

 // 结果为 TRUE，所以后边的文本将被打印出来。
 if (isset( $var )) {
    echo  "This var is set so I will print." ;
}

 // 在后边的例子中，我们将使用 var_dump 输出 isset() 的返回值。
// the return value of isset().

 $a  =  "test" ;
 $b  =  "anothertest" ;

 var_dump (isset( $a ));       // TRUE
  echo "<br/>";
 var_dump (isset( $a ,  $b ));  // TRUE
  echo "<br/>";

 unset ( $a );

 var_dump (isset( $a ));      // FALSE
  echo "<br/>";
 var_dump (isset( $a ,  $b ));  // FALSE
  echo "<br/>";

 $foo  =  NULL ;
 var_dump (isset( $foo ));    // FALSE
  echo "<br/>";

// 这对于数组中的元素也同样有效： 
$a  = array ( 'test'  =>  1 ,  'hello'  =>  NULL ,  'pie'  => array( 'a'  =>  'apple' ));

 var_dump (isset( $a [ 'test' ]));             // TRUE
  echo "<br/>";
 var_dump (isset( $a [ 'foo' ]));              // FALSE
  echo "<br/>";
 var_dump (isset( $a [ 'hello' ]));            // FALSE
  echo "<br/>";

// 键 'hello' 的值等于 NULL，所以被认为是未置值的。
// 如果想检测 NULL 键值，可以试试下边的方法。 
 var_dump ( array_key_exists ( 'hello' ,  $a ));  // TRUE
  echo "<br/>";

// Checking deeper array values
 var_dump (isset( $a [ 'pie' ][ 'a' ]));         // TRUE
  echo "<br/>";
 var_dump (isset( $a [ 'pie' ][ 'b' ]));         // FALSE
  echo "<br/>";
 var_dump (isset( $a [ 'cake' ][ 'a' ][ 'b' ]));   // FALSE
  echo "<br/>";
/**
This var is set so I will print.bool(true) 
bool(true) 
bool(false) 
bool(false) 
bool(false) 
bool(true) 
bool(false) 
bool(false) 
bool(true) 
bool(true) 
bool(false) 
bool(false) 
 */



